<?php

/*
 * Tomato Framework
 * 
 * Copyright 2012-2012 Luax.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * @link http://www.tomatoframework.com
 * @link http://www.luaxlou.com
 * @version $Id$
 */

/**
 *
 * @author Luax <luaxcn@gmail.com>
 */
class ActionListener implements IActionListener
{
 
    /**
     * only two types of respoone
     * @param type $result 
     */
    public function onAfter($result)
    {
        if($result ===false)
        {
            $this->responseError($result);
        }  else
        {
            $this->responseSuccess($result);
        } 
    }

    public function onBefore($controller)
    {
        if(property_exists($controller,'template'))
        {
            $controller->template = SmartyAdapter::instance();
        }
    }

    public function onException(Exception $e)
    {
        $this->responseError($e->getMessage());
    }
    
    private function responseSuccess($result)
    {
        if (request_is_ajax())
        {

            exit(json_encode(array("status" => 1, "data" => $result)));
        }
    }
    
    private function responseError($message)
    {
        if (request_is_ajax())
        {

            exit(json_encode(array("status" => 0, "data" => $message)));
        }
    }

}

interface IActionListener
{
    const EVENT_BEFORE ="onBefore";
    const EVENT_AFTER ="onAfter";
    const EVENT_EXCEPTION ="onException";


    public function onAfter($result);

    public function onBefore($controller);

    public function onException(Exception $e);
}

?>